home *** CD-ROM | disk | FTP | other *** search
- UNIT iff;
-
- INTERFACE
-
- USES Intuition, Graphics;
-
- CONST IffName = "iff.library";
- IffVersion = 16;
- IFF_BADTASK = -1;
- IFF_CANTOPENFILE = 16;
- IFF_READERROR = 17;
- IFF_NOMEM = 18;
- IFF_NOTIFF = 19;
- IFF_WRITEERROR = 20;
- IFF_NOILBM = 24;
- IFF_NOBMHD = 25;
- IFF_NOBODY = 26;
- IFF_TOOMANYPLANES = 27;
- Komprimiert = 1;
- Unkomprimiert = 0;
- HAM = %10000000;
-
- TYPE p_Chunk = ^Chunk;
- Chunk = RECORD
- ckID : LONG;
- ckSize: LONG;
- CkData: BYTE;
- END;
-
- p_BitMapHeader = ^BitMapHeader;
- BitMapHeader = RECORD
- w,h : INTEGER;
- x,y : INTEGER;
- nPlanes : BYTE;
- masking : BYTE;
- compression : BYTE;
- pad1 : BYTE;
- transparentColor : INTEGER;
- xAspect,yAspect : BYTE;
- pageWidth,pageHeight: INTEGER;
- END;
-
- VAR iffbase : PTR;
-
- LIBRARY iffbase:
- -30 : FUNCTION Openiff(a0: STR): PTR;
- -36 : PROCEDURE Closeiff(a1: PTR);
- -42 : FUNCTION Findchunk(a1: PTR; d0: LONG): p_Chunk;
- -48 : FUNCTION GetBMHD(a1: PTR): p_BitMapHeader;
- -54 : FUNCTION GetColorTab(a1: PTR; a0: PTR): LONG;
- -60 : FUNCTION DecodePic(a1: PTR; a0: PTR): BOOLEAN;
- -66 : FUNCTION SaveBitMap(a0: STR; a1,a2: PTR; d0:LONG): BOOLEAN;
- -72 : FUNCTION SaveClip(a0: STR; a1,a2: PTR; d0: LONG;
- d1,d2,d3,d4: INTEGER): BOOLEAN;
- -78 : FUNCTION IffError: LONG;
- -84 : FUNCTION GetViewModes(a1: PTR): WORD;
- -90 : FUNCTION NewOpenIff(a0: STR; d0: LONG): PTR;
- END;
-
- PROCEDURE Closedown;
- PROCEDURE LoadPic(win: p_Window; PicName: STRING);
- PROCEDURE SavePic(win: p_Window; PicName: STRING);
- PROCEDURE SaveBrush(win: p_Window; PicName: STRING; x1,y1,x2,y2: INTEGER);
-
- IMPLEMENTATION
-
- PROCEDURE Closedown;
-
- BEGIN
- CloseLib(iffbase);
- END;
-
- PROCEDURE LoadPic;
-
- VAR Colourtable : ARRAY [1..128] OF WORD;
- Counter : LONG;
- Rp : p_RastPort;
- IFFFile : PTR;
- BMHD : p_BitmapHeader;
- Width,Height: INTEGER;
-
- LABEL Skipit;
-
- BEGIN
- IFFFile:=NIL;
- Rp:=Win^.RPort;
- Width:=Win^.WScreen^.Width;
- Height:=Win^.WScreen^.Height;
- IF PicName<>"" THEN
- BEGIN
- SetAPen(Rp,0);
- RectFill(Rp,0,0,Width,Height);
- SetAPen(Rp,1);
- IFFFile:=OpenIFF(PicName);
- IF IFFFile=NIL THEN
- BEGIN
- WRITELN("Can't open file!!");
- GOTO SkipIt;
- END;
- BMHD:=GetBMHD(IFFFile);
- IF BMHD=NIL THEN
- BEGIN
- WRITELN("No BMHD-Chunk!!");
- GOTO SkipIt;
- END;
- IF DecodePic(IFFFile,Rp^.BitMap) THEN
- BEGIN
- counter:=GetColorTab(IFFFile,^colourtable);
- LoadRGB4(^win^.WScreen^.ViewPort,^colourtable,counter);
- END
- ELSE
- BEGIN
- WRITELN("No BODY-Chunk!!");
- GOTO SkipIt;
- END;
- SkipIt:
- IF IFFFile<>NIL THEN CloseIFF(IFFFile);
- END;
- END;
-
- PROCEDURE SavePic;
-
- CONST HOLDNMODIFY = $800;
-
- VAR ColorTab : PTR;
- Scr : p_Screen;
- SOK : BOOLEAN;
- Rp : p_RastPort;
-
- BEGIN
- Scr:=Win^.WScreen;
- ColorTab:=Scr^.ViewPort.ColorMap^.ColorTable;
- Rp:=Win^.RPort;
- IF PicName<>"" THEN
- BEGIN
- IF (HOLDNMODIFY AND Scr^.ViewPort.Modes)>0 THEN
- SOK:=SaveBitMap(PicName,Rp^.BitMap,ColorTab,Komprimiert+HAM)
- ELSE
- SOK:=SaveBitMap(PicName,Rp^.BitMap,ColorTab,Komprimiert);
- IF NOT SOK THEN WRITELN('Write Error!!');
- END;
- END;
-
- PROCEDURE SaveBrush;
-
- CONST HOLDNMODIFY = $800;
-
- VAR ColorTab : PTR;
- Scr : p_Screen;
- SOK : BOOLEAN;
- Rp : p_RastPort;
-
- BEGIN
- Scr:=Win^.WScreen;
- ColorTab:=Scr^.ViewPort.ColorMap^.ColorTable;
- Rp:=Win^.RPort;
- IF PicName<>"" THEN
- BEGIN
- IF (HOLDNMODIFY AND Scr^.ViewPort.Modes)>0 THEN
- SOK:=SaveClip(PicName,Rp^.BitMap,ColorTab,Komprimiert+HAM,x1,y1,x2,y2)
- ELSE
- SOK:=SaveClip(PicName,Rp^.BitMap,ColorTab,Komprimiert,x1,y1,x2,y2);
- IF NOT SOK THEN WRITELN('Write Error!!');
- END;
- END;
-
- BEGIN
- OpenLib(iffbase,Iffname,Iffversion);
- ADDEXITSERVER(CloseDown);
- IF iffbase = NIL THEN
- BEGIN
- IF FromWB THEN
- BEGIN
- ASSIGN(INPUT, 'CON:50/100/540/60/Sorry :');
- RESET(INPUT);
- OUTPUT:=INPUT;
- WRITELN("Couldn't open the ",Iffname," Version ",IffVersion,"!");
- DELAY(100);
- END
- ELSE
- WRITELN("Couldn't open the ",Iffname," Version",IffVersion, "!");
- HALT(10);
- END;
- END;
-
-